#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 20010, M = 20010;

int e[M], ne[M], h[N], idx;
int n, m, ans;

void add(int a, int b)
{
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx ++;
}

int dfs(int u)
{
	int d1 = 0, d2 = 0;
	for (int i = h[u]; i != -1 ; i = ne[i])
	{
		int j = e[i];
		int d = dfs(j);
		if (d >= d1)
		{
			d2 = d1;
			d1 = d;
		}
		else if (d > d2) d2 = d;
	}
	ans = max(ans, d1 + d2);
	
	return d1 + 1;
}

int main()
{
	memset(h, -1, sizeof h);
	cin >> n >> m;
	for (int i = 2 ; i <= n ; i ++)
	{
		int p;
		scanf("%d", &p);
		add(p, i);
	}
	
	for (int i = n + 1 ; i <= m + n; i ++)
	{
		int p;
		scanf("%d", &p);
		add(p, i);
	}
	
	dfs(1);
	
	cout << ans << endl;
	
	return 0;
}
